package top.gytf.unifiedcall.producer.support.exception;

import top.gytf.unifiedcall.model.Sortable;
import top.gytf.unifiedcall.model.exception.BaseException;

/**
 * 用于适配无法被识别的未知异常，将其转为支持的BaseException后处理
 */
public interface ExceptionAdapter extends Sortable {
    /**
     * 适配支持的异常类型
     */
    default boolean isSupported(Class<? extends Throwable> cls) {
        return calcSupportScore(cls) >= 0;
    }

    /**
     * 计算异常类型适配程度
     * @return 表示支持的合适程度，越大表示支持程度越高，小于0表示不支持，一般会选择适合程度最高的适配器处理
     */
    int calcSupportScore(Class<? extends Throwable> cls);

    /**
     * 进行转换
     */
    BaseException convert(Throwable throwable);
}
